import { createApp } from 'vue'
import ElementPlus from 'element-plus'
import zhCn from 'element-plus/dist/locale/zh-cn.mjs'
import 'element-plus/dist/index.css'
import App from './App.vue'
import router from './router'
import store from './store'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import { getToken } from './utils/auth'
import './forceAdminPerms' // 导入权限修复脚本
import './utils/fixAdminPerms' // 导入控制台工具
import './utils/emergencyFix' // 导入紧急修复脚本
import './assets/styles/fullscreen.css' // 导入全屏模式样式

// 引入NProgress修复工具
import NProgressFix from './utils/nprogress-fix'

// 添加ResizeObserver错误处理
const originalError = window.console.error;
window.console.error = function(...args) {
  if (args.length > 0 && typeof args[0] === 'string' && 
      args[0].includes('ResizeObserver loop') && 
      args[0].includes('notifications')) {
    // 忽略ResizeObserver循环错误
    return;
  }
  originalError.apply(console, args);
};

// 创建应用实例
const app = createApp(App)

// 注册所有图标
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
  app.component(key, component)
}

// 安装插件
app.use(ElementPlus, {
  locale: zhCn // 设置Element Plus为中文
})
app.use(store)
app.use(router)
app.use(NProgressFix) // 安装NProgress修复插件

// 应用启动时检查并刷新用户信息
async function initApp() {
  if (getToken()) {
    console.log('[Main] 检测到用户已登录，正在初始化用户信息...')
    try {
      const userData = await store.dispatch('getUserInfo', true)
      console.log('[Main] 应用启动时刷新用户信息成功:', userData)
      
      // 确认权限数据
      console.log('[Main] 权限列表:', store.getters.permissions)
      console.log('[Main] 是否有图谱权限:', store.getters.hasAnyGraphPermission)
      
      // 额外检查，确保store中的权限数据是正确的
      if (userData && userData.permissions && userData.permissions.length > 0) {
        const hasGraphView = userData.permissions.includes('graph:view')
        const hasAnalysis = userData.permissions.some(p => p && p.startsWith('analysis:'))
        console.log('[Main] 直接从响应检查 - graph:view:', hasGraphView)
        console.log('[Main] 直接从响应检查 - 分析权限:', hasAnalysis)
      }
    } catch (error) {
      console.error('[Main] 应用启动时刷新用户信息失败:', error)
    }
  }
  
  // 最后挂载应用
  app.mount('#app')

  // 在DOM加载完成后手动检查权限并控制菜单
  if (getToken()) {
    setTimeout(() => {
      const permissions = store.getters.permissions
      console.log('[Main] DOM加载后检查权限:', permissions)
      
      // 检查权限
      const hasGraphView = permissions.includes('graph:view')
      const hasAnalysis = permissions.some(p => p && typeof p === 'string' && p.startsWith('analysis:'))
      console.log('[Main] DOM加载后 - graph:view权限:', hasGraphView)
      console.log('[Main] DOM加载后 - analysis权限:', hasAnalysis)
      
      // 检查是否为admin用户
      const userInfo = store.getters.userInfo
      const isAdminUser = userInfo && userInfo.username === 'admin'
      console.log('[Main] 是否为admin用户:', isAdminUser)
      
      // 手动找到菜单并显示
      if (hasGraphView || hasAnalysis || isAdminUser) {
        console.log('[Main] 检测到相关权限或admin用户，尝试手动显示菜单...')
        // 使用DOM API直接操作菜单
        const menuItems = document.querySelectorAll('.el-menu-item')
        for (let i = 0; i < menuItems.length; i++) {
          const item = menuItems[i]
          if (item.getAttribute('index') === '/graph-analysis') {
            console.log('[Main] 找到知识图谱分析菜单，设置样式为显示')
            item.style.display = 'flex'
            break
          }
        }
        
        // 如果是admin用户，确保权限已添加到localStorage
        if (isAdminUser && (!hasGraphView && !hasAnalysis)) {
          console.log('[Main] 检测到admin用户没有图谱权限，正在添加...')
          try {
            // 导入并执行权限修复函数
            import('./forceAdminPerms').then(module => {
              if (module.forceAdminPermissions) {
                module.forceAdminPermissions()
                console.log('[Main] 已执行权限修复')
              }
            }).catch(error => {
              console.error('[Main] 导入权限修复模块失败:', error)
            })
          } catch (error) {
            console.error('[Main] 执行权限修复时出错:', error)
          }
        }
      }
    }, 1000)  // 延迟1秒，确保DOM已经完全加载
  }
}

// 启动应用
initApp()
